package com.leon.programPeral.ch2.ext2;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Ch2Ext2MoreThanTwoTimesClient
{
	private static List<Integer> list = new ArrayList<>();

	static
	{
		list.add(0);
		list.add(1);
		list.add(2);
		list.add(3);
		list.add(4);
		list.add(4);
		list.add(5);
		list.add(6);
		list.add(7);
		list.add(8);
		list.add(9);
		list.add(10);
		list.add(11);
		list.add(12);
		list.add(13);
		list.add(14);
		list.add(15);

	}

	public static void main(String[] args)
	{
		int min = Integer.MAX_VALUE;
		int max = Integer.MIN_VALUE;
		for (Integer integer : list)
		{
			if (integer < min)
				min = integer;
			if (integer > max)
				max = integer;
		}
		d(min, max);
	}

	private static int d(int min, int max)
	{
		if (max - min == 0)
		{
			int k = 0;
			Iterator<Integer> iterator = list.stream().filter(a -> a == max).iterator();
			while (iterator.hasNext())
			{
				iterator.next();
				k++;
			}
			if (k > 1)
			{
				System.out.println(min);
				return max;
			}
		}
		if (max < min)
		{
			return 0;
		}
		int mid = (max + min) / 2;
		int i = 0;
		Iterator<Integer> iterator = list.stream().filter(a -> a >= min && a <= mid).iterator();
		while (iterator.hasNext())
		{
			iterator.next();
			i++;
		}

		int j = 0;
		iterator = list.stream().filter(a -> a > mid && a <= max).iterator();
		while (iterator.hasNext())
		{
			iterator.next();
			j++;
		}
		if (i > j)
		{
			return d(min, mid);
		}
		else
		{
			return d(mid + 1, max);
		}
	}
}
